ConfluenceIsAround Subroutine

private subroutine ConfluenceIsAround(row, col, i, j, flowDir, confluence, orders, Norder)

Scan the eigth cells surrounding the center cell (row,col) (neglecting the upstream cell (i,j) ) to find if a confluence is present. The confluence cell must be of the same order or not yet defined.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: row
integer, intent(in) :: col
integer, intent(in) :: i
integer, intent(in) :: j
type(grid_integer), intent(in) :: flowDir
logical, intent(out) :: confluence
type(grid_integer), intent(in) :: orders
integer, intent(in) :: Norder

Source Code

SUBROUTINE ConfluenceIsAround &
!
(row,col,i,j,flowDir,confluence,orders,Norder)


IMPLICIT NONE

TYPE (grid_integer), INTENT(IN):: flowDir
TYPE (grid_integer), INTENT(IN):: orders
INTEGER, INTENT(IN):: i,j,row,col,Norder
LOGICAL, INTENT(OUT):: confluence
!-----------------------------------------------------------


IF(.NOT. IsOutOfGrid(row,col+1,flowDir) ) THEN
    IF(flowDir%mat(row,col+1) == W .AND.&
       (row /= i .OR. col+1 /= j).AND. &
       (orders%mat(row,col+1) == orders%nodata.OR. &
       orders%mat(row,col+1) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF

IF(.NOT. IsOutOfGrid(row+1,col+1,flowDir) ) THEN
    IF(flowDir%mat(row+1,col+1) == NW .AND.&
       (row+1 /=i .OR. col+1 /= j).AND. &
       (orders%mat(row+1,col+1) == orders%nodata.OR. &
       orders%mat(row+1,col+1) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF

IF(.NOT. IsOutOfGrid(row+1,col,flowDir) ) THEN
    IF(flowDir%mat(row+1,col) == N .AND.&
       (row+1 /=i .OR. col /= j).AND. &
       (orders%mat(row+1,col) == orders%nodata.OR. &
       orders%mat(row+1,col) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF

IF(.NOT. IsOutOfGrid(row+1,col-1,flowDir) ) THEN
    IF(flowDir%mat(row+1,col-1) == NE .AND.&
       (row+1 /= i .OR. col-1 /= j).AND. &
       (orders%mat(row+1,col-1) == orders%nodata.OR. &
       orders%mat(row+1,col-1) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF

IF(.NOT. IsOutOfGrid(row,col-1,flowDir) ) THEN
    IF(flowDir%mat(row,col-1) == E .AND.&
       (row /= i .OR. col-1 /= j).AND. &
       (orders%mat(row,col-1) == orders%nodata.OR. &
       orders%mat(row,col-1) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF

IF(.NOT. IsOutOfGrid(row-1,col-1,flowDir) ) THEN
    IF(flowDir%mat(row-1,col-1) == SE .AND.&
       (row-1 /= i .OR. col-1 /= j).AND. &
       (orders%mat(row-1,col-1) == orders%nodata.OR. &
       orders%mat(row-1,col-1) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF

IF(.NOT. IsOutOfGrid(row-1,col,flowDir) ) THEN
    IF(flowDir%mat(row-1,col) == S .AND.&
       (row-1 /= i .OR. col /= j).AND. &
       (orders%mat(row-1,col) == orders%nodata.OR. &
       orders%mat(row-1,col) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF

IF(.NOT. IsOutOfGrid(row-1,col+1,flowDir) ) THEN
    IF(flowDir%mat(row-1,col+1) == SW .AND.&
       (row-1 /= i .OR. col+1 /= j).AND. &
       (orders%mat(row-1,col+1) == orders%nodata.OR. &
       orders%mat(row-1,col+1) == Norder) ) THEN
       confluence = .TRUE.
    ENDIF
ENDIF


RETURN
END SUBROUTINE ConfluenceIsAround